home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 9
/
FM Towns Free Software Collection 9.iso
/
t_os
/
tool
/
ugoku
/
src
/
vdsys
/
dv02s_s.asm
next >
Wrap
Assembly Source File
|
1994-11-16
|
103KB
|
6,167 lines
; vram → buffer → v02
; 表示モード16専用転送ルーチン
; 1993 8/14 Hiroshi TODA
.386p
extrn VSYNC_counter : dword
public v02_digit_timing_flag0
public v02_digit_buf0
public v02_digit_counter
public v02_digit_wait
public v02_digit_work
public v02_digit_ytab
public v02_digit_ctab
;-------------------------------------------
DGROUP group v02_data
v02_data segment dword public 'DATA' use32
v02_digit_timing_flag0 dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
v02_digit_buf0 dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
v02_digit_counter dd ?
v02_digit_wait dd ?
v02_digit_work dd ?
v02_digit_ytab dd ?
v02_digit_ctab dd ?
v02_digit_wk dd ?
v02_data ends
;-------------------------------------------
cseg segment dword public use32 'CODE'
assume cs:cseg,ds:cseg
; diskに録画する関数
;int v02_trans_128_0()
public v02_trans_128_0
db 'v02_trans_128_0',15
v02_trans_128_0 proc near
push ebp
; mov ebp,esp
push esi
push edi
push ebx
cld
lea ebx,ds:v02_digit_timing_flag0
mov ecx,ds:v02_digit_counter
cmp dword ptr [ecx*4][ebx],0
jne #vd10
mov eax,ds:v02_digit_wait
cmp eax,VSYNC_counter
ja #vd10
sub VSYNC_counter,eax
inc dword ptr [ecx*4][ebx]
lea ebx,ds:v02_digit_buf0
mov edi,[ecx*4][ebx] ; buf(圧縮画の入る所) -> edi
inc ecx
cmp ecx,8
jb short #vd00
xor ecx,ecx
#vd00: mov ds:v02_digit_counter,ecx
push edi
mov edi,ds:v02_digit_work ; work(原画の入る所) -> edi
mov ax,10ch
mov fs,ax
mov esi,32+1024*4*12
xor ecx,ecx
mov edx,96
#vd01: mov cl,64 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
add esi,1024*4-256
dec edx
jne short #vd01
pop edi
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ytab ; Ytable -> ebx
xor edx,edx
mov ecx,128*96/8
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ctab ; Ctable -> ebx
mov edx,96/2
#vd08: mov ecx,128/8
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
add esi,128*2
dec edx
jne short #vd08
#vd10: pop ebx
pop edi
pop esi
; mov esp,ebp
pop ebp
ret
v02_trans_128_0 endp
;int v02_trans_160_0()
public v02_trans_160_0
db 'v02_trans_160_0',15
v02_trans_160_0 proc near
push ebp
; mov ebp,esp
push esi
push edi
push ebx
cld
lea ebx,ds:v02_digit_timing_flag0
mov ecx,ds:v02_digit_counter
cmp dword ptr [ecx*4][ebx],0
jne #vd10
mov eax,ds:v02_digit_wait
cmp eax,VSYNC_counter
ja #vd10
sub VSYNC_counter,eax
inc dword ptr [ecx*4][ebx]
lea ebx,ds:v02_digit_buf0
mov edi,[ecx*4][ebx] ; buf(圧縮画の入る所) -> edi
inc ecx
cmp ecx,8
jb short #vd00
xor ecx,ecx
#vd00: mov ds:v02_digit_counter,ecx
push edi
mov edi,ds:v02_digit_work ; work(原画の入る所) -> edi
mov ax,10ch
mov fs,ax
mov esi,0
xor ecx,ecx
mov edx,120
#vd01: mov cl,80 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
add esi,1024*4-320
dec edx
jne short #vd01
pop edi
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ytab ; Ytable -> ebx
xor edx,edx
mov ecx,160*120/8
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ctab ; Ctable -> ebx
mov edx,120/2
#vd08: mov ecx,160/8
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
add esi,160*2
dec edx
jne short #vd08
#vd10: pop ebx
pop edi
pop esi
; mov esp,ebp
pop ebp
ret
v02_trans_160_0 endp
;int v02_trans_192_0()
public v02_trans_192_0
db 'v02_trans_192_0',15
v02_trans_192_0 proc near
push ebp
; mov ebp,esp
push esi
push edi
push ebx
cld
lea ebx,ds:v02_digit_timing_flag0
mov ecx,ds:v02_digit_counter
cmp dword ptr [ecx*4][ebx],0
jne #vd10
mov eax,ds:v02_digit_wait
cmp eax,VSYNC_counter
ja #vd10
push eax ; 1994 4/10 追加
mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
pop eax
je #vd10
sub VSYNC_counter,eax
inc dword ptr [ecx*4][ebx]
lea ebx,ds:v02_digit_buf0
mov edi,[ecx*4][ebx] ; buf(圧縮画の入る所) -> edi
inc ecx
cmp ecx,8
jb short #vd00
xor ecx,ecx
#vd00: mov ds:v02_digit_counter,ecx
push edi
mov edi,ds:v02_digit_work ; work(原画の入る所) -> edi
mov ax,10ch
mov fs,ax
mov esi,128+1024*2*48
xor ecx,ecx
mov edx,144
#vd01: mov cl,96 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
add esi,1024*2-384
dec edx
jne short #vd01
pop edi
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ytab ; Ytable -> ebx
xor edx,edx
mov ecx,192*144/8
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ctab ; Ctable -> ebx
mov edx,144/2
#vd08: mov ecx,192/8
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
add esi,192*2
dec edx
jne short #vd08
#vd10: pop ebx
pop edi
pop esi
; mov esp,ebp
pop ebp
ret
v02_trans_192_0 endp
;int v02_trans_256_0()
public v02_trans_256_0
db 'v02_trans_256_0',15
v02_trans_256_0 proc near
push ebp
; mov ebp,esp
push esi
push edi
push ebx
cld
lea ebx,ds:v02_digit_timing_flag0
mov ecx,ds:v02_digit_counter
cmp dword ptr [ecx*4][ebx],0
jne #vd10
mov eax,ds:v02_digit_wait
cmp eax,VSYNC_counter
ja #vd10
push eax ; 1994 4/10 追加
mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
pop eax
je #vd10
sub VSYNC_counter,eax
inc dword ptr [ecx*4][ebx]
lea ebx,ds:v02_digit_buf0
mov edi,[ecx*4][ebx] ; buf(圧縮画の入る所) -> edi
inc ecx
cmp ecx,8
jb short #vd00
xor ecx,ecx
#vd00: mov ds:v02_digit_counter,ecx
push edi
mov edi,ds:v02_digit_work ; work(原画の入る所) -> edi
mov ax,10ch
mov fs,ax
mov esi,64+1024*2*24
xor ecx,ecx
mov edx,192
#vd01: mov cl,128 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
add esi,1024*2-512
dec edx
jne short #vd01
pop edi
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ytab ; Ytable -> ebx
xor edx,edx
mov ecx,256*192/8
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ctab ; Ctable -> ebx
mov edx,192/2
#vd08: mov ecx,256/8
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
add esi,256*2
dec edx
jne short #vd08
#vd10: pop ebx
pop edi
pop esi
; mov esp,ebp
pop ebp
ret
v02_trans_256_0 endp
;int v02_trans_320_0()
public v02_trans_320_0
db 'v02_trans_320_0',15
v02_trans_320_0 proc near
push ebp
; mov ebp,esp
push esi
push edi
push ebx
cld
lea ebx,ds:v02_digit_timing_flag0
mov ecx,ds:v02_digit_counter
cmp dword ptr [ecx*4][ebx],0
jne #vd10
mov eax,ds:v02_digit_wait
cmp eax,VSYNC_counter
ja #vd10
push eax ; 1994 4/10 追加
mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
pop eax
je #vd10
sub VSYNC_counter,eax
inc dword ptr [ecx*4][ebx]
lea ebx,ds:v02_digit_buf0
mov edi,[ecx*4][ebx] ; buf(圧縮画の入る所) -> edi
inc ecx
cmp ecx,8
jb short #vd00
xor ecx,ecx
#vd00: mov ds:v02_digit_counter,ecx
push edi
mov edi,ds:v02_digit_work ; work(原画の入る所) -> edi
mov ax,10ch
mov fs,ax
mov esi,0
xor ecx,ecx
mov edx,240
#vd01: mov cl,160 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
add esi,1024*2-640
dec edx
jne short #vd01
pop edi
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ytab ; Ytable -> ebx
xor edx,edx
mov ecx,320*240/8
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
mov esi,ds:v02_digit_work ; work(原画ある所) -> esi
mov ebp,ds:v02_digit_ctab ; Ctable -> ebx
mov edx,240/2
#vd08: mov ecx,320/8
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
add esi,320*2
dec edx
jne short #vd08
#vd10: pop ebx
pop edi
pop esi
; mov esp,ebp
pop ebp
ret
v02_trans_320_0 endp
; オンメモリに同時録画・録音する関数
; 引数用
SND_BUF equ 8
SND_COUNTER equ 12
GRF_BUF equ 16
GRF_COUNTER equ 20
GRF_WAIT equ 24
COUNTER_START equ 28
Y_TABLE equ 32
C_TABLE equ 36
WK_AREA equ 40
;int v02_snd_trans_128_4( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=12000
public v02_snd_trans_128_4
db 'v02_snd_trans_128_4',19
v02_snd_trans_128_4 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_128
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_128
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_128
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_128
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_128
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_128
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_128
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_128
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_128_4 endp
;int v02_snd_trans_128_5( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9600
public v02_snd_trans_128_5
db 'v02_snd_trans_128_5',19
v02_snd_trans_128_5 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_128
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_128
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_128_5 endp
;int v02_snd_trans_128_6( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=8000
public v02_snd_trans_128_6
db 'v02_snd_trans_128_6',19
v02_snd_trans_128_6 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_128
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_128
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_128
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_128
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_128
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_128
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_128
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_128
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_128
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_128
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_128
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_128
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
jmp #vd000
#vd_E: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
#vd_Ea: cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
#vd_Eb: or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_128_6 endp
;int v02_snd_trans_128_7( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=6857
public v02_snd_trans_128_7
db 'v02_snd_trans_128_7',19
v02_snd_trans_128_7 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_128
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_128
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_128
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_128
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_128
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_128
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_128
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_128
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_128
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_128
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_128
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_128
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd120: mov edx,04e8h
in al,dx
test al,1
jne short #vd121
call v02_snd_128
jmp short #vd120
#vd121: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd130: mov edx,04e8h
in al,dx
test al,1
jne short #vd131
call v02_snd_128
jmp short #vd130
#vd131: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_128_7 endp
;
; ↓vram(128*96) trans
;
DIV128_1 equ 2
DIV128_2 equ 2
v02_snd_128 proc near
push eax
push ecx
push edi
or ebx,ebx
jne #vd01
cmp dword ptr [ebp].GRF_COUNTER,0
jle #vd10
mov eax,[ebp].GRF_WAIT
cmp eax,[ebp].COUNTER_START
jg #vd10
push eax
mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
pop eax
je #vd10
sub [ebp].COUNTER_START,eax
mov edi,[ebp].WK_AREA
mov esi,32+1024*4*12
mov ecx,64/DIV128_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
dec dword ptr [ebp].GRF_COUNTER
inc ebx
jmp #vd10
#vd01: cmp ebx,96*DIV128_1
je short #vd03
ja #vd05
mov edi,ds:v02_digit_wk
mov ecx,64/DIV128_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
inc ebx
test ebx,DIV128_1-1
jne #vd10
add esi,1024*4-256
#vd02: jmp #vd10
#vd03: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov esi,[ebp].WK_AREA
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,16/DIV128_2
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd05: cmp ebx,96*DIV128_1+96*DIV128_2
je short #vd07
ja short #vd08
push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,16/DIV128_2
#vd06: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd06
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd07: mov esi,[ebp].WK_AREA
#vd08: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].C_TABLE
mov edx,0000ffffh
mov ecx,16/DIV128_2
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
test ebx,DIV128_2-1
jne short #vd0A
add esi,128*2
#vd0A: cmp ebx,96*DIV128_1+96*DIV128_2+48*DIV128_2
jne short #vd10
xor ebx,ebx
#vd10: pop edi
pop ecx
pop eax
ret
v02_snd_128 endp
;
; ↑vram(128*96) trans
;
; v02用ルーチン
;int v02_trans_128_9600( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9600
public v02_trans_128_9600
db 'v02_trans_128_9600',18
v02_trans_128_9600 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_128
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_128
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_128_9600 endp
; v02用ルーチン
;int v02_trans_128_19200( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=19200
public v02_trans_128_19200
db 'v02_trans_128_19200',19
v02_trans_128_19200 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_128
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
jne #vd000
#vd_E: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_128
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_128_19200 endp
;int v02_snd_trans_160_4( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=12000
public v02_snd_trans_160_4
db 'v02_snd_trans_160_4',19
v02_snd_trans_160_4 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_160
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_160
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_160
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_160
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_160
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_160
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_160
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_160
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_160_4 endp
;int v02_snd_trans_160_5( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9600
public v02_snd_trans_160_5
db 'v02_snd_trans_160_5',19
v02_snd_trans_160_5 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_160
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_160
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_160_5 endp
;int v02_snd_trans_160_6( char *snd_buf, int snd_counter,
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=8000
public v02_snd_trans_160_6
db 'v02_snd_trans_160_6',19
v02_snd_trans_160_6 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_160
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_160
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_160
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_160
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_160
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_160
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_160
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_160
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_160
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_160
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_160
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_160
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
jmp #vd000
#vd_E: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti ;interrupt enable
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_160_6 endp
;int v02_snd_trans_160_7( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=6857
public v02_snd_trans_160_7
db 'v02_snd_trans_160_7',19
v02_snd_trans_160_7 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_160
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_160
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_160
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_160
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_160
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_160
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_160
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_160
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_160
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_160
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_160
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_160
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd120: mov edx,04e8h
in al,dx
test al,1
jne short #vd121
call v02_snd_160
jmp short #vd120
#vd121: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd130: mov edx,04e8h
in al,dx
test al,1
jne short #vd131
call v02_snd_160
jmp short #vd130
#vd131: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_160_7 endp
;
; ↓vram(160*120) trans
;
DIV160_1 equ 2
DIV160_2 equ 2
v02_snd_160 proc near
push eax
push ecx
push edi
or ebx,ebx
jne #vd01
cmp dword ptr [ebp].GRF_COUNTER,0
jle #vd10
mov eax,[ebp].GRF_WAIT
cmp eax,[ebp].COUNTER_START
jg #vd10
push eax
mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
pop eax
je #vd10
sub [ebp].COUNTER_START,eax
mov edi,[ebp].WK_AREA
mov esi,0
mov ecx,80/DIV160_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
dec dword ptr [ebp].GRF_COUNTER
inc ebx
jmp #vd10
#vd01: cmp ebx,120*DIV160_1
je short #vd03
ja #vd05
mov edi,ds:v02_digit_wk
mov ecx,80/DIV160_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
inc ebx
test ebx,DIV160_1-1
jne #vd10
add esi,1024*4-320
#vd02: jmp #vd10
#vd03: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov esi,[ebp].WK_AREA
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,20/DIV160_2
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd05: cmp ebx,120*DIV160_1+120*DIV160_2
je short #vd07
ja short #vd08
push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,20/DIV160_2
#vd06: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd06
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd07: mov esi,[ebp].WK_AREA
#vd08: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].C_TABLE
mov edx,0000ffffh
mov ecx,20/DIV160_2
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
test ebx,DIV160_2-1
jne short #vd0A
add esi,160*2
#vd0A: cmp ebx,120*DIV160_1+120*DIV160_2+60*DIV160_2
jne short #vd10
xor ebx,ebx
#vd10: pop edi
pop ecx
pop eax
ret
v02_snd_160 endp
;
; ↑vram(160*120) trans
;
; v02用ルーチン
;int v02_trans_160_9600( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9600
public v02_trans_160_9600
db 'v02_trans_160_9600',18
v02_trans_160_9600 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_160
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_160
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_160_9600 endp
; v02用ルーチン
;int v02_trans_160_19200( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=19200
public v02_trans_160_19200
db 'v02_trans_160_19200',19
v02_trans_160_19200 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_160
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
jne #vd000
#vd_E: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_160
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_160_19200 endp
;int v02_snd_trans_192_4( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=12000
public v02_snd_trans_192_4
db 'v02_snd_trans_192_4',19
v02_snd_trans_192_4 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_192
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_192
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_192
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_192
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_192
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_192
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_192
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_192
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_192_4 endp
;int v02_snd_trans_192_5( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9200
public v02_snd_trans_192_5
db 'v02_snd_trans_192_5',19
v02_snd_trans_192_5 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_192
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_192
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_192_5 endp
;int v02_snd_trans_192_6( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=8000
public v02_snd_trans_192_6
db 'v02_snd_trans_192_6',19
v02_snd_trans_192_6 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_192
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_192
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_192
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_192
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_192
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_192
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_192
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_192
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_192
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_192
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_192
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_192
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
jmp #vd000
#vd_E: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_192_6 endp
;int v02_snd_trans_192_7( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=6857
public v02_snd_trans_192_7
db 'v02_snd_trans_192_7',19
v02_snd_trans_192_7 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_192
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_192
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_192
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_192
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_192
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_192
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_192
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_192
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_192
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_192
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_192
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_192
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd120: mov edx,04e8h
in al,dx
test al,1
jne short #vd121
call v02_snd_192
jmp short #vd120
#vd121: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd130: mov edx,04e8h
in al,dx
test al,1
jne short #vd131
call v02_snd_192
jmp short #vd130
#vd131: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_192_7 endp
;
; ↓vram(192*144) trans
;
DIV192_1 equ 2
DIV192_2 equ 2
v02_snd_192 proc near
push eax
push ecx
push edi
or ebx,ebx
jne #vd01
cmp dword ptr [ebp].GRF_COUNTER,0
jle #vd10
mov eax,[ebp].GRF_WAIT
cmp eax,[ebp].COUNTER_START
jg #vd10
push eax
mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
pop eax
je #vd10
sub [ebp].COUNTER_START,eax
mov edi,[ebp].WK_AREA
mov esi,128+1024*2*48
mov ecx,96/DIV192_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
dec dword ptr [ebp].GRF_COUNTER
inc ebx
jmp #vd10
#vd01: cmp ebx,144*DIV192_1
je short #vd03
ja #vd05
mov edi,ds:v02_digit_wk
mov ecx,96/DIV192_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
inc ebx
test ebx,DIV192_1-1
jne #vd10
add esi,1024*2-384
#vd02: jmp #vd10
#vd03: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov esi,[ebp].WK_AREA
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,24/DIV192_2
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd05: cmp ebx,144*DIV192_1+144*DIV192_2
je short #vd07
ja short #vd08
push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,24/DIV192_2
#vd06: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd06
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd07: mov esi,[ebp].WK_AREA
#vd08: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].C_TABLE
mov edx,0000ffffh
mov ecx,24/DIV192_2
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
test ebx,DIV192_2-1
jne short #vd0A
add esi,192*2
#vd0A: cmp ebx,144*DIV192_1+144*DIV192_2+72*DIV192_2
jne short #vd10
xor ebx,ebx
#vd10: pop edi
pop ecx
pop eax
ret
v02_snd_192 endp
;
; ↑vram(192*144) trans
;
; v02用ルーチン
;int v02_trans_192_9600( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9600
public v02_trans_192_9600
db 'v02_trans_192_9600',18
v02_trans_192_9600 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_192
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_192
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_192_9600 endp
; v02用ルーチン
;int v02_trans_192_19200( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=19200
public v02_trans_192_19200
db 'v02_trans_192_19200',19
v02_trans_192_19200 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_192
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
jne #vd000
#vd_E: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_192
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_192_19200 endp
;int v02_snd_trans_256_4( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=12000
public v02_snd_trans_256_4
db 'v02_snd_trans_256_4',19
v02_snd_trans_256_4 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_256
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_256
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_256
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_256
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_256
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_256
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_256
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_256
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_256_4 endp
;int v02_snd_trans_256_5( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9200
public v02_snd_trans_256_5
db 'v02_snd_trans_256_5',19
v02_snd_trans_256_5 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_256
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_256
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_256_5 endp
;int v02_snd_trans_256_6( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=8000
public v02_snd_trans_256_6
db 'v02_snd_trans_256_6',19
v02_snd_trans_256_6 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_256
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_256
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_256
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_256
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_256
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_256
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_256
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_256
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_256
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_256
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_256
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_256
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
jmp #vd000
#vd_E: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_256_6 endp
;int v02_snd_trans_256_7( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=6857
public v02_snd_trans_256_7
db 'v02_snd_trans_256_7',19
v02_snd_trans_256_7 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_256
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_256
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_256
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_256
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_256
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_256
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_256
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_256
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_256
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_256
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_256
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_256
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd120: mov edx,04e8h
in al,dx
test al,1
jne short #vd121
call v02_snd_256
jmp short #vd120
#vd121: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd130: mov edx,04e8h
in al,dx
test al,1
jne short #vd131
call v02_snd_256
jmp short #vd130
#vd131: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_256_7 endp
;
; ↓vram(256*192) trans
;
DIV256_1 equ 2
DIV256_2 equ 2
v02_snd_256 proc near
push eax
push ecx
push edi
or ebx,ebx
jne #vd01
cmp dword ptr [ebp].GRF_COUNTER,0
jle #vd10
mov eax,[ebp].GRF_WAIT
cmp eax,[ebp].COUNTER_START
jg #vd10
push eax
mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
pop eax
je #vd10
sub [ebp].COUNTER_START,eax
mov edi,[ebp].WK_AREA
mov esi,64+1024*2*24
mov ecx,128/DIV256_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
dec dword ptr [ebp].GRF_COUNTER
inc ebx
jmp #vd10
#vd01: cmp ebx,192*DIV256_1
je short #vd03
ja #vd05
mov edi,ds:v02_digit_wk
mov ecx,128/DIV256_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
inc ebx
test ebx,DIV256_1-1
jne #vd10
add esi,1024*2-512
#vd02: jmp #vd10
#vd03: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov esi,[ebp].WK_AREA
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,32/DIV256_2
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd05: cmp ebx,192*DIV256_1+192*DIV256_2
je short #vd07
ja short #vd08
push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,32/DIV256_2
#vd06: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd06
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd07: mov esi,[ebp].WK_AREA
#vd08: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].C_TABLE
mov edx,0000ffffh
mov ecx,32/DIV256_2
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
test ebx,DIV256_2-1
jne short #vd0A
add esi,256*2
#vd0A: cmp ebx,192*DIV256_1+192*DIV256_2+96*DIV256_2
jne short #vd10
xor ebx,ebx
#vd10: pop edi
pop ecx
pop eax
ret
v02_snd_256 endp
;
; ↑vram(256*192) trans
;
; v02用ルーチン
;int v02_trans_256_9600( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9600
public v02_trans_256_9600
db 'v02_trans_256_9600',18
v02_trans_256_9600 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_256
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_256
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_256_9600 endp
; v02用ルーチン
;int v02_trans_256_19200( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=19200
public v02_trans_256_19200
db 'v02_trans_256_19200',19
v02_trans_256_19200 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_256
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
jne #vd000
#vd_E: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_256
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_256_19200 endp
;int v02_snd_trans_320_4( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=12000
public v02_snd_trans_320_4
db 'v02_snd_trans_320_4',19
v02_snd_trans_320_4 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_320
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_320
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_320
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_320
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_320
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_320
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_320
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_320
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_320_4 endp
;int v02_snd_trans_320_5( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9200
public v02_snd_trans_320_5
db 'v02_snd_trans_320_5',19
v02_snd_trans_320_5 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_320
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_320
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_320_5 endp
;int v02_snd_trans_320_6( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=8000
public v02_snd_trans_320_6
db 'v02_snd_trans_320_6',19
v02_snd_trans_320_6 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_320
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_320
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_320
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_320
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_320
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_320
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_320
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_320
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_320
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_320
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_320
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_320
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
jmp #vd000
#vd_E: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_320_6 endp
;int v02_snd_trans_320_7( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=6857
public v02_snd_trans_320_7
db 'v02_snd_trans_320_7',19
v02_snd_trans_320_7 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_320
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_320
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd020: mov edx,04e8h
in al,dx
test al,1
jne short #vd021
call v02_snd_320
jmp short #vd020
#vd021: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd030: mov edx,04e8h
in al,dx
test al,1
jne short #vd031
call v02_snd_320
jmp short #vd030
#vd031: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd040: mov edx,04e8h
in al,dx
test al,1
jne short #vd041
call v02_snd_320
jmp short #vd040
#vd041: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd050: mov edx,04e8h
in al,dx
test al,1
jne short #vd051
call v02_snd_320
jmp short #vd050
#vd051: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd060: mov edx,04e8h
in al,dx
test al,1
jne short #vd061
call v02_snd_320
jmp short #vd060
#vd061: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd070: mov edx,04e8h
in al,dx
test al,1
jne short #vd071
call v02_snd_320
jmp short #vd070
#vd071: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd080: mov edx,04e8h
in al,dx
test al,1
jne short #vd081
call v02_snd_320
jmp short #vd080
#vd081: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd090: mov edx,04e8h
in al,dx
test al,1
jne short #vd091
call v02_snd_320
jmp short #vd090
#vd091: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd100: mov edx,04e8h
in al,dx
test al,1
jne short #vd101
call v02_snd_320
jmp short #vd100
#vd101: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
#vd110: mov edx,04e8h
in al,dx
test al,1
jne short #vd111
call v02_snd_320
jmp short #vd110
#vd111: mov edx,04e7h
in al,dx
inc dword ptr [ebp].COUNTER_START
#vd120: mov edx,04e8h
in al,dx
test al,1
jne short #vd121
call v02_snd_320
jmp short #vd120
#vd121: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd130: mov edx,04e8h
in al,dx
test al,1
jne short #vd131
call v02_snd_320
jmp short #vd130
#vd131: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_snd_trans_320_7 endp
;
; ↓vram(320*240) trans
;
DIV320_1 equ 2
DIV320_2 equ 2
v02_snd_320 proc near
push eax
push ecx
push edi
or ebx,ebx
jne #vd01
cmp dword ptr [ebp].GRF_COUNTER,0
jle #vd10
mov eax,[ebp].GRF_WAIT
cmp eax,[ebp].COUNTER_START
jg #vd10
push eax
mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
pop eax
je #vd10
sub [ebp].COUNTER_START,eax
mov edi,[ebp].WK_AREA
mov esi,0
mov ecx,160/DIV320_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
dec dword ptr [ebp].GRF_COUNTER
inc ebx
jmp #vd10
#vd01: cmp ebx,240*DIV320_1
je short #vd03
ja #vd05
mov edi,ds:v02_digit_wk
mov ecx,160/DIV320_1 ; vram 転送
rep movs dword ptr [edi],fs:[esi]
mov ds:v02_digit_wk,edi
inc ebx
test ebx,DIV320_1-1
jne #vd10
add esi,1024*2-640
#vd02: jmp #vd10
#vd03: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov esi,[ebp].WK_AREA
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,40/DIV320_2
#vd04: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd04
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd05: cmp ebx,240*DIV320_1+240*DIV320_2
je short #vd07
ja short #vd08
push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].Y_TABLE
xor edx,edx
mov ecx,40/DIV320_2
#vd06: lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
shl ebx,16
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bl,ds:[edx][ebp].32768
lodsd
mov dx,ax
shr eax,16
mov dl,ds:[edx][ebp]
mov dh,ds:[eax][ebp]
mov bh,ds:[edx][ebp].32768
rol ebx,16
mov eax,ebx
stosd
loop #vd06
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
jmp #vd10
#vd07: mov esi,[ebp].WK_AREA
#vd08: push ebp
push ebx
mov edi,[ebp].GRF_BUF
mov ebp,[ebp].C_TABLE
mov edx,0000ffffh
mov ecx,40/DIV320_2
#vd09: lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
shl ebx,16
lodsd
and eax,0000ffffh
mov bl,ds:[eax][ebp]
lodsd
and eax,0000ffffh
mov bh,ds:[eax][ebp]
rol ebx,16
mov eax,ebx
stosd
loop #vd09
pop ebx
pop ebp
mov [ebp].GRF_BUF,edi
inc ebx
test ebx,DIV320_2-1
jne short #vd0A
add esi,320*2
#vd0A: cmp ebx,240*DIV320_1+240*DIV320_2+120*DIV320_2
jne short #vd10
xor ebx,ebx
#vd10: pop edi
pop ecx
pop eax
ret
v02_snd_320 endp
;
; ↑vram(256*192) trans
;
; v02用ルーチン
;int v02_trans_320_9600( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=9600
public v02_trans_320_9600
db 'v02_trans_320_9600',18
v02_trans_320_9600 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
push eax ; work
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_320
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
mov [esp],eax
inc dword ptr [ebp].COUNTER_START
#vd010: mov edx,04e8h
in al,dx
test al,1
jne short #vd011
call v02_snd_320
jmp short #vd010
#vd011: mov edx,04e7h
in al,dx
add eax,[esp]
shr eax,1
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
je #vd_E
jmp #vd000
#vd_E: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
pop eax ; work
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_320_9600 endp
; v02用ルーチン
;int v02_trans_320_19200( char *snd_buf, int snd_counter
; char *grf_buf, int grf_counter, int grf_wait
; int count_start,
; char *table1, char *table2, char *work
; )
;snd sampling freq=19200
public v02_trans_320_19200
db 'v02_trans_320_19200',19
v02_trans_320_19200 proc near
push ebp
mov ebp,esp
push esi
push edi
push ebx
cli ;Int disable
cld
#vdwt0: mov al,30 ; フィールドが1から0に変わる瞬間まで待つ
mov edx,0440h ; この瞬間からタイミングを考慮して
out dx,al ; 総合的にstart_countを決める必要がある
mov edx,0442h
in ax,dx
test eax,0800h
je #vdwt0
#vdwt1: mov al,30
mov edx,0440h
out dx,al
mov edx,0442h
in ax,dx
test eax,0800h
jne #vdwt1
mov edi,[ebp].SND_BUF
mov ecx,[ebp].SND_COUNTER
cmp ecx,0
je #vd_E
mov ax,10ch
mov fs,ax
xor eax,eax
xor ebx,ebx
#vd000: mov edx,04e8h
in al,dx
test al,1
jne short #vd001
call v02_snd_320
jmp short #vd000
#vd001: mov edx,04e7h
in al,dx
stosb
inc dword ptr [ebp].COUNTER_START
dec ecx
jne #vd000
#vd_E: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
cmp dword ptr [ebp].GRF_COUNTER,0
jg #vd_E
#vd_E1: call v02_snd_320
inc dword ptr [ebp].COUNTER_START
or ebx,ebx
jne #vd_E1
sti
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
v02_trans_320_19200 endp
cseg ends
end